【X68000(Z)アセンブラ講座 第030回 CG画面の高速クリアー】   お久しぶりです!! 今回はCG画面に表示されている画像を一瞬でクリアーする方法を解説します。 破線の内側を'HC_CG.s'と言うファイル名で保存して下さい。 ------------------------------------------------------------------------------------------------ ******************************************************************************** * * アプリ名 : HC_CG.x * * CG画面高速クリアー * * Ver1.00 * ******************************************************************************** include A:\XC\INCLUDE\DOSCALL.MAC include A:\XC\INCLUDE\IOCSCALL.MAC gpip equ $E88001 crtc_r21 equ $E8002A crtc_mode equ $E80480 .cpu 68000 .data msg01: dc.b 'スペースキーを押すとCG画面が高速に消えます。',13,10,0 .even .text start: * ユーザーモードからスーパーバイザーモードに切り替え moveq.l #_B_SUPER,d0 movea.l #0,a1 trap #15 * 画面モードの設定 moveq.l #_CRTMOD,d0 * 画面モードの設定 move.w #12,d1 * 画面モードの番号 : 16 = 768x512x4bit / 12 = 512x512x16bit trap #15 * 画面をクリアして表示をオンにする moveq.l #_G_CLR_ON,d0 * 画面をクリアして表示をオンにする trap #15 bsr draw_cg * CG画面に画像を描画する代わりに紫色で塗り潰す pea msg01 dc.w _PRINT addq.l #4,sp * スペースキーが押されるまで待つ key_space: moveq.l #_BITSNS,d0 moveq.l #6,d1 trap #15 and.b #%00100000,d0 tst.b d0 beq key_space bsr wait_v_sync * CG画面の高速クリアー move.w #%0000_1111,crtc_r21 * 65536色1面モード move.w #%0000_0010,crtc_mode * CG高速クリアー開始 dc.w _EXIT * CG画面を紫色に描画する draw_cg: movea.l #$C00000,a0 move.w #511,d7 draw_cg_1: move.w #511,d6 draw_cg_2: move.w #%00000_01111_01111_0,(a0)+ * 紫色のピクセルを描画 dbra d6,draw_cg_2 dbra d7,draw_cg_1 rts * 1/60秒毎のタイミングを取る wait_v_sync: movem.l d0/a0,-(sp) movea.l #gpip,a0 wait_v_sync_1: move.b (a0),d0 and.b #%0100_0000,d0 tst.b d0 bne wait_v_sync_1 wait_v_sync_2: move.b (a0),d0 and.b #%0100_0000,d0 tst.b d0 beq wait_v_sync_1 movem.l (sp)+,d0/a0 rts * [EOF] ------------------------------------------------------------------------------------------------ ファイルの保存が終わったらコマンドプロンプトから、 A>AS HC_CG.s [Enter] A>LK HC_CG.o [Enter} A>HC_CG.x [Enter] 以上(↑)のように入力するとプログラムが起動します。 今回はCG画面をクリアーするだけなので簡単に理解できた方もいると思いますが いろんなゲームのいろんなシーンで役立つと思いますので 是非とも皆さんの作りたいゲームに取り入れてほしいと思います!! [EOF]